/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package my.work.gcb;

import system.Exc;
import system.Persistencia;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import javax.imageio.ImageIO;
import javax.naming.NamingException;
import javax.swing.DefaultListModel;
import net.sourceforge.jbarcodebean.BarcodeException;
import net.sourceforge.jbarcodebean.JBarcodeBean;
import net.sourceforge.jbarcodebean.model.Codabar;

/**
 *
 * @author UTPVirtual
 */
public class Ibarcode {

    private Persistencia persistencia = new Persistencia();
    String appPath = System.getProperties().getProperty("user.dir");
    String appnsystem = System.getProperties().getProperty("os.name");
    private int ctcero = 6;
    private int fontSize = 15;
    //Tamaño del codigo de barra
    private int height = 75, width = 145;
    // posiscion del numero de secuencia en X,Y
    private int possecx = (ctcero * fontSize - (width / 2)) + fontSize, possecy = height;
    // cantidad de cartones por lote 
    private int cantlote;
    // rango 
    int numinicio;
    String ruta;

    Ibarcode(int cantlote, int numinicio) throws IOException {
        this.cantlote = cantlote;
        this.numinicio = numinicio;
    }

    public void g_codebar(DefaultListModel lmcgb) throws IOException, Exc, SQLException, NamingException, Exception {
        // lmcgb
        int c = numinicio;
        try {
            File directorio = null;

          
            if (!appnsystem.contains("Windows")) {
                ruta = appPath + "\\public\\c_barra\\";

            } else {
                ruta = appPath + "/public/c_barra/";
            }
            directorio = new File(ruta);
            if (!directorio.exists()) {
                if (directorio.mkdirs()) {
                    System.out.println("Se ha creado directorio /n");
                } else {
                    System.out.println("No se puede  Crear el Directorio  /n  ");
                }
               
            }
            
            else {
                System.out.print("El directorio ya existe");
            }


        } catch (Exception ex) {
            System.out.printf(ex.getMessage());
        }


        for (int a = 0; a < lmcgb.getSize(); a++) {
            JBarcodeBean barcode = new JBarcodeBean();
            //  String code = lmcgb.elementAt(a).toString();
            // nuestro tipo de codigo de barra
            String code = ccncarton(String.valueOf(c));
            barcode.setCodeType(new Codabar());
            //barcode.setCodeType(new Code39());
            // nuestro valor a codificar y algunas configuraciones mas
            barcode.setCode(code);
            barcode.setCheckDigit(true);
            barcode.setShowText(false);
            //  x , y
            BufferedImage bufferedImage = barcode.draw(new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB));
            Graphics2D g2 = bufferedImage.createGraphics();
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON);

            g2.setFont(new Font("TimesRoman", Font.PLAIN, fontSize));
            g2.setColor(Color.BLACK);
            /// Cadena a dibujar    , posiciones x , y
            g2.drawString(lmcgb.getElementAt(a).toString(), possecx, possecy);
            // guardar en disco como png
            File cb_carton = new File(ruta + c + ".jpg");
            //  File ns_carton = new File(appPath + "\\public\\ns_carton\\" + c + ".jpg");
            ImageIO.write(bufferedImage, "png", cb_carton);
            // ImageIO.write(crearPNG(lmcgb.getElementAt(a).toString()), "png", ns_carton);
            c += +1;
        }
        mensaje("Se han creado: " + lmcgb.getSize() + " imagenes de codigo de barra ");
        mensaje("En  la ruta -->"+appPath);
        mensaje("Insertando registros....");
        
        insert(lmcgb);
    }
    /*public BufferedImage crearPNG(String sec) {
     BufferedImage bufferedImage = new BufferedImage(75, 75, BufferedImage.TYPE_INT_RGB);
     Graphics2D g2 = bufferedImage.createGraphics();
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
     RenderingHints.VALUE_ANTIALIAS_ON);
     int fontSize = 10;
     g2.setFont(new Font("TimesRoman", Font.PLAIN, fontSize));
     g2.setColor(Color.BLACK);
     ///g2.f
     g2.drawString(sec, 10, 20);
     //g2.setColor(Color.white);
     // Aqu&iacute; deber&iacute;amos introducir el c&oacute;digo que queramos pintar.
     g2.dispose();
     return bufferedImage;

     }
     */

    public void insert(DefaultListModel lmcgb) throws Exc, SQLException, NamingException, Exception {
        int c = numinicio;
        persistencia.dbConnect();
        int ccartones=0;
        for (int a = 0; a < lmcgb.getSize(); a++) {

            int lote = c / cantlote;
            int loteact = 0;
            if (lote <= 1) {
                loteact = 1;
            } else {
                loteact = lote;
            }
            
            String code = lmcgb.elementAt(a).toString();
            String sql;
            sql = "INSERT INTO \"barcode\" (n_carton,n_serie,lote)    VALUES (" + c + ",'" + code + "', " + loteact + "  )";
            //sql = "INSERT INTO \"barcode\" (n_carton)    VALUES (" + c + ")";
            persistencia.executeUpdate(sql);
            c += +1;
            ccartones +=1;
                    if(ccartones==1000)
                    {
                         ccartones =0;
                        mensaje("Se han creado  "+ a +"  Cartones" );
                    }
        }
        persistencia.dbDisconnect();
    }

    private String ccncarton(String nc) {
        String ncarton = "";
        int cant = (ctcero - nc.length());
        for (int c = 1; c <= cant; c++) {
            ncarton += "0";
        }
        ncarton += nc;

        return ncarton;
    }

    private void mensaje(String mensaje) {
        System.out.println(mensaje);
    }
}
